package com.sogoodsoft.entity.crm;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.sogoodsoft.entity.IdEntity;
import com.sogoodsoft.entity.account.User;
import com.sogoodsoft.entity.app.SysClass;

/**
 * CUSTOMER对象模型
 */
@Entity
@Table(name = "CUSTOMER")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Customer extends IdEntity implements java.io.Serializable {
    private static final long serialVersionUID = 1L;

    /** 添加日期 */
    private Date adddate;

    /** 客户所在公司 */
    private String company;

    /** 客户名称 */
    private String linkman;

    /** 客户生日 */
    private Date birthday;

    /** 客户姓别 */
    private Long gender;

    /** 客户职位 */
    private String position;

    /** 客户联系地址 */
    private String address;

    /** 客户邮编 */
    private String zip;

    /** 客户手机 */
    private String mobile;

    /** 客户固话 */
    private String tel;

    /** 客户传真 */
    private String fax;

    /** 客户公司主页 */
    private String homepage;

    /** 客户邮箱 */
    private String email;

    /** 客户信息来源 */
    private String cfrom;

    /** 客户类型 */
    private Long customertype;

    /** 客户星级 */
    private Long star;

    /**  */
    private String msn;

    /**  */
    private String qq;

    /** 客户属于某个系统用户 */
    private Long belong;
    private String username;

    /** 备注 */
    private String note;

    /** 客户描述 */
    private String description;

    /** 客户信息最后更新日期 */
    private Date lastupdate;

    private SysClass customerStar;

    private SysClass type;

    /**
     * 获取添加日期
     * 
     * @return 添加日期
     */
    @Temporal(TemporalType.DATE)
    @Column(name = "adddate")
    public Date getAdddate() {
        return this.adddate;
    }

    /**
     * 设置添加日期
     * 
     * @param adddate
     *            添加日期
     */
    public void setAdddate(Date adddate) {
        this.adddate = adddate;
    }

    /**
     * 获取客户所在公司
     * 
     * @return 客户所在公司
     */
    @Column(name = "company")
    public String getCompany() {
        return this.company;
    }

    /**
     * 设置客户所在公司
     * 
     * @param company
     *            客户所在公司
     */
    public void setCompany(String company) {
        this.company = company;
    }

    /**
     * 获取客户名称
     * 
     * @return 客户名称
     */
    @Column(name = "linkman")
    public String getLinkman() {
        return this.linkman;
    }

    /**
     * 设置客户名称
     * 
     * @param linkman
     *            客户名称
     */
    public void setLinkman(String linkman) {
        this.linkman = linkman;
    }

    /**
     * 获取客户职位
     * 
     * @return 客户职位
     */
    @Column(name = "position")
    public String getPosition() {
        return this.position;
    }

    /**
     * 设置客户职位
     * 
     * @param position
     *            客户职位
     */
    public void setPosition(String position) {
        this.position = position;
    }

    /**
     * 获取客户联系地址
     * 
     * @return 客户联系地址
     */
    @Column(name = "address")
    public String getAddress() {
        return this.address;
    }

    /**
     * 设置客户联系地址
     * 
     * @param address
     *            客户联系地址
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /**
     * 获取客户邮编
     * 
     * @return 客户邮编
     */
    @Column(name = "zip")
    public String getZip() {
        return this.zip;
    }

    /**
     * 设置客户邮编
     * 
     * @param zip
     *            客户邮编
     */
    public void setZip(String zip) {
        this.zip = zip;
    }

    @Column(name = "mobile")
    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    /**
     * 获取客户固话
     * 
     * @return 客户固话
     */
    @Column(name = "tel")
    public String getTel() {
        return this.tel;
    }

    /**
     * 设置客户固话
     * 
     * @param tel
     *            客户固话
     */
    public void setTel(String tel) {
        this.tel = tel;
    }

    /**
     * 获取客户传真
     * 
     * @return 客户传真
     */
    @Column(name = "fax")
    public String getFax() {
        return this.fax;
    }

    /**
     * 设置客户传真
     * 
     * @param fax
     *            客户传真
     */
    public void setFax(String fax) {
        this.fax = fax;
    }

    /**
     * 获取客户公司主页
     * 
     * @return 客户公司主页
     */
    @Column(name = "homepage")
    public String getHomepage() {
        return this.homepage;
    }

    /**
     * 设置客户公司主页
     * 
     * @param homepage
     *            客户公司主页
     */
    public void setHomepage(String homepage) {
        this.homepage = homepage;
    }

    /**
     * 获取客户邮箱
     * 
     * @return 客户邮箱
     */
    @Column(name = "email")
    public String getEmail() {
        return this.email;
    }

    /**
     * 设置客户邮箱
     * 
     * @param email
     *            客户邮箱
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * 获取客户信息来源
     * 
     * @return 客户信息来源
     */
    @Column(name = "cfrom")
    public String getCfrom() {
        return this.cfrom;
    }

    /**
     * 设置客户信息来源
     * 
     * @param from
     *            客户信息来源
     */
    public void setCfrom(String from) {
        this.cfrom = from;
    }

    /**
     * 获取客户类型
     * 
     * @return 客户类型
     */
    @Column(name = "customertype", insertable = false, updatable = false)
    public Long getCustomertype() {
        return this.customertype;
    }

    /**
     * 设置客户类型
     * 
     * @param clienttype
     *            客户类型
     */
    public void setCustomertype(Long customertype) {
        this.customertype = customertype;
    }

    /**
     * 获取客户星级
     * 
     * @return 客户星级
     */
    @Column(name = "star", insertable = false, updatable = false)
    public Long getStar() {
        return this.star;
    }

    /**
     * 设置客户星级
     * 
     * @param star
     *            客户星级
     */
    public void setStar(Long star) {
        this.star = star;
    }

    /**
     * 获取msn
     * 
     * @return null
     */
    @Column(name = "msn")
    public String getMsn() {
        return this.msn;
    }

    /**
     * 设置msn
     * 
     * @param msn
     *            null
     */
    public void setMsn(String msn) {
        this.msn = msn;
    }

    /**
     * 获取qq
     * 
     * @return null
     */
    @Column(name = "qq")
    public String getQq() {
        return this.qq;
    }

    /**
     * 设置qq
     * 
     * @param qq
     *            null
     */
    public void setQq(String qq) {
        this.qq = qq;
    }

    /**
     * 获取客户属于某个系统用户
     * 
     * @return 客户属于某个系统用户
     */
    @Column(name = "belong")
    public Long getBelong() {
        return this.belong;
    }

    /**
     * 设置客户属于某个系统用户
     * 
     * @param belong
     *            客户属于某个系统用户
     */
    public void setBelong(Long belong) {
        this.belong = belong;
    }

    @Column(name = "username")
    public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	/**
     * 获取备注
     * 
     * @return 备注
     */
    @Column(name = "note")
    public String getNote() {
        return this.note;
    }

    /**
     * 设置备注
     * 
     * @param note
     *            备注
     */
    public void setNote(String note) {
        this.note = note;
    }

    /**
     * 获取客户描述
     * 
     * @return 客户描述
     */
    @Column(name = "description")
    public String getDescription() {
        return this.description;
    }

    /**
     * 设置客户描述
     * 
     * @param desc
     *            客户描述
     */
    public void setDescription(String desc) {
        this.description = desc;
    }

    /**
     * 获取客户信息最后更新日期
     * 
     * @return 客户信息最后更新日期
     */
    @Temporal(TemporalType.DATE)
    @Column(name = "lastupdate")
    public Date getLastupdate() {
        return this.lastupdate;
    }

    /**
     * 设置客户信息最后更新日期
     * 
     * @param lastupdate
     *            客户信息最后更新日期
     */
    public void setLastupdate(Date lastupdate) {
        this.lastupdate = lastupdate;
    }

    @Column(name = "gender")
    public Long getGender() {
        return gender;
    }

    public void setGender(Long gender) {
        this.gender = gender;
    }

    @Column(name = "birthday")
    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }


    @ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, optional = true)
    @JoinColumn(name = "star")
    public SysClass getCustomerStar() {
        return customerStar;
    }

    public void setCustomerStar(SysClass customerStar) {
        this.customerStar = customerStar;
    }

    @ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, optional = true)
    @JoinColumn(name = "customertype")
    public SysClass getType() {
        return type;
    }

    public void setType(SysClass type) {
        this.type = type;
    }

}